0x608060405234801562000010575f80fd5b506040516200271738038062002717833981016040819052620000339162000347565b60408051808201909152600981526839b33230b9b330b9b360b91b60208201526200005e81620001ba565b506003805460ff191690556200007433620001cc565b62000080838362000225565b15620000ec5760405162461bcd60e51b815260206004820152603060248201527f54686520686f6d6520616e642061776179207465616d2063616e206e6f74206260448201526f32903a34329039b0b6b2903a32b0b69760811b60648201526084015b60405180910390fd5b428111620001635760405162461bcd60e51b815260206004820152603760248201527f596f752063616e206e6f74207365742073746172742074696d65206f6620746860448201527f65206d6174636820746f2061207061737420646174652e0000000000000000006064820152608401620000e3565b60408051606081018252848152602081018490529081018290526005806200018c868262000441565b5060208201516001820190620001a3908262000441565b506040820151816002015590505050505062000526565b6002620001c8828262000441565b5050565b600380546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8160405160200162000239919062000509565b604051602081830303815290604052805190602001208360405160200162000262919062000509565b6040516020818303038152906040528051906020012014905092915050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620002b157818101518382015260200162000297565b50505f910152565b5f82601f830112620002c9575f80fd5b81516001600160401b0380821115620002e657620002e662000281565b604051601f8301601f19908116603f0116810190828211818310171562000311576200031162000281565b816040528381528660208588010111156200032a575f80fd5b6200033d84602083016020890162000295565b9695505050505050565b5f805f606084860312156200035a575f80fd5b83516001600160401b038082111562000371575f80fd5b6200037f87838801620002b9565b9450602086015191508082111562000395575f80fd5b50620003a486828701620002b9565b925050604084015190509250925092565b600181811c90821680620003ca57607f821691505b602082108103620003e957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200043c575f81815260208120601f850160051c81016020861015620004175750805b601f850160051c820191505b81811015620004385782815560010162000423565b5050505b505050565b81516001600160401b038111156200045d576200045d62000281565b62000475816200046e8454620003b5565b84620003ef565b602080601f831160018114620004ab575f8415620004935750858301515b5f19600386901b1c1916600185901b17855562000438565b5f85815260208120601f198616915b82811015620004db57888601518255948401946001909101908401620004ba565b5085821015620004f957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f82516200051c81846020870162000295565b9190910192915050565b6121e380620005345f395ff3fe60806040526004361061013c575f3560e01c80635c975abb116100bb578063c65f3ff811610071578063e985e9c511610057578063e985e9c514610354578063f242432a1461039b578063f2fde38b146103ba575f80fd5b8063c65f3ff814610321578063dadd0a5714610340575f80fd5b80638da5cb5b116100a15780638da5cb5b146102ae578063a22cb465146102e3578063c21260a514610302575f80fd5b80635c975abb14610283578063715018a61461029a575f80fd5b806326f1a1fd116101105780632eb2c2d6116100f65780632eb2c2d6146102245780633ccfd60b146102435780634e1273f414610257575f80fd5b806326f1a1fd146101f0578063298ec2081461020f575f80fd5b8062fdd58e1461014057806301ffc9a7146101725780630e89341c146101a15780632606f345146101cd575b5f80fd5b34801561014b575f80fd5b5061015f61015a3660046118b8565b6103d9565b6040519081526020015b60405180910390f35b34801561017d575f80fd5b5061019161018c3660046118f5565b610414565b6040519015158152602001610169565b3480156101ac575f80fd5b506101c06101bb366004611917565b6104ae565b604051610169919061197b565b3480156101d8575f80fd5b506101e1610540565b6040516101699392919061198d565b3480156101fb575f80fd5b5061015f61020a366004611917565b610662565b61022261021d3660046119c2565b610681565b005b34801561022f575f80fd5b5061022261023e366004611b2d565b610928565b34801561024e575f80fd5b50610222610960565b348015610262575f80fd5b50610276610271366004611bd0565b610a5f565b6040516101699190611cce565b34801561028e575f80fd5b5060035460ff16610191565b3480156102a5575f80fd5b50610222610b31565b3480156102b9575f80fd5b5060035461010090046001600160a01b03166040516001600160a01b039091168152602001610169565b3480156102ee575f80fd5b506102226102fd366004611ce0565b610b44565b34801561030d575f80fd5b5061015f61031c366004611917565b610b53565b34801561032c575f80fd5b5061022261033b366004611d19565b610b62565b34801561034b575f80fd5b50610276610f2d565b34801561035f575f80fd5b5061019161036e366004611d90565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205460ff1690565b3480156103a6575f80fd5b506102226103b5366004611dc1565b610f83565b3480156103c5575f80fd5b506102226103d4366004611e21565b610fb4565b5f6001600160a01b0383166103ec575f80fd5b505f818152602081815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061047657506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061040e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461040e565b6060600280546104bd90611e3a565b80601f01602080910402602001604051908101604052809291908181526020018280546104e990611e3a565b80156105345780601f1061050b57610100808354040283529160200191610534565b820191905f5260205f20905b81548152906001019060200180831161051757829003601f168201915b50505050509050919050565b60058054819061054f90611e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90611e3a565b80156105c65780601f1061059d576101008083540402835291602001916105c6565b820191905f5260205f20905b8154815290600101906020018083116105a957829003601f168201915b5050505050908060010180546105db90611e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611e3a565b80156106525780601f1061062957610100808354040283529160200191610652565b820191905f5260205f20905b81548152906001019060200180831161063557829003601f168201915b5050505050908060020154905083565b60098181548110610671575f80fd5b5f91825260209091200154905081565b610689610fd7565b156106db5760405162461bcd60e51b815260206004820152601b60248201527f4576656e742068617320616c7265616479206f636375727265642e000000000060448201526064015b60405180910390fd5b6009546107505760405162461bcd60e51b815260206004820152602260248201527f5468657265206973206e6f2063617465676f727920746f20627579207469636b60448201527f657400000000000000000000000000000000000000000000000000000000000060648201526084016106d2565b60095461075f90600190611e86565b821115801561076c575060015b6107b85760405162461bcd60e51b815260206004820152601860248201527f43617465676f727920646f6573206e6f742065786973742e000000000000000060448201526064016106d2565b600982815481106107cb576107cb611e99565b905f5260205f2001548160085f8581526020019081526020015f20600501546107f49190611ead565b11156108685760405162461bcd60e51b815260206004820152603d60248201527f5468652063617465676f727920686173206e6f7420656e6f75676820706c616360448201527f6520666f722074686520616d6f756e7420796f7520656e74657265642e00000060648201526084016106d2565b5f82815260086020526040902060010154610884908290611ec0565b3410156108d35760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f7567682070726963652e0000000060448201526064016106d2565b6003546108ff9061010090046001600160a01b031633848460405180602001604052805f815250610ff5565b5f828152600860205260408120600501805483929061091f908490611ead565b90915550505050565b6001600160a01b0385163314806109445750610944853361036e565b61094c575f80fd5b6109598585858585611101565b5050505050565b61096861126a565b5f47116109b75760405162461bcd60e51b815260206004820152600d60248201527f42616c616e636520697320302e0000000000000000000000000000000000000060448201526064016106d2565b6003546040515f9161010090046001600160a01b03169047908381818185875af1925050503d805f8114610a06576040519150601f19603f3d011682016040523d82523d5f602084013e610a0b565b606091505b5050905080610a5c5760405162461bcd60e51b815260206004820152601f60248201527f576974686472617720636f756c646e277420626520636f6d706c657465642e0060448201526064016106d2565b50565b60608151835114610a6e575f80fd5b5f835167ffffffffffffffff811115610a8957610a896119e2565b604051908082528060200260200182016040528015610ab2578160200160208202803683370190505b5090505f5b8451811015610b2957610afc858281518110610ad557610ad5611e99565b6020026020010151858381518110610aef57610aef611e99565b60200260200101516103d9565b828281518110610b0e57610b0e611e99565b6020908102919091010152610b2281611ed7565b9050610ab7565b509392505050565b610b3961126a565b610b425f611286565b565b610b4f3383836112f6565b5050565b600a8181548110610671575f80fd5b610b6a61126a565b610b72610fd7565b15610bbf5760405162461bcd60e51b815260206004820152601b60248201527f4576656e742068617320616c7265616479206f636375727265642e000000000060448201526064016106d2565b600360ff84161115610c135760405162461bcd60e51b815260206004820152601a60248201527f446972656374696f6e206973206f7574206f662072616e67652e00000000000060448201526064016106d2565b5f8211610c885760405162461bcd60e51b815260206004820152602260248201527f43617061636974792073686f756c642062652067726561746572207468616e2060448201527f302e00000000000000000000000000000000000000000000000000000000000060648201526084016106d2565b5f5b600954811015610dbb575f8181526008602052604090206004018054610d369190610cb490611e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090611e3a565b8015610d2b5780601f10610d0257610100808354040283529160200191610d2b565b820191905f5260205f20905b815481529060010190602001808311610d0e57829003601f168201915b50505050508361137f565b15610da95760405162461bcd60e51b815260206004820152602f60248201527f546865726520697320616c726561647920612063617465676f7279207769746860448201527f207468652073616d65206e616d652e000000000000000000000000000000000060648201526084016106d2565b80610db381611ed7565b915050610c8a565b505f610dc660045490565b9050610dd6600480546001019055565b6040518060c001604052808281526020018681526020018560ff166003811115610e0257610e02611eef565b6003811115610e1357610e13611eef565b81526020018481526020018381526020015f81525060085f8381526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548160ff02191690836003811115610e7457610e74611eef565b02179055506060820151600382015560808201516004820190610e979082611f4d565b5060a09190910151600590910155600980546001810182555f9182527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018490556040805160208101909152908152610ef5903390839086906113d7565b600a80546001810182555f919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8015550505050565b6060600a805480602002602001604051908101604052809291908181526020018280548015610f7957602002820191905f5260205f20905b815481526020019060010190808311610f65575b5050505050905090565b6001600160a01b038516331480610f9f5750610f9f853361036e565b610fa7575f80fd5b6109598585858585610ff5565b610fbc61126a565b6001600160a01b038116610fce575f80fd5b610a5c81611286565b6007545f904210610ff057610fea6114a6565b50600190565b505f90565b6001600160a01b038416611007575f80fd5b335f61101285611500565b90505f61101e85611500565b905061102e838989858589611549565b5f868152602081815260408083206001600160a01b038c1684529091529020548581101561105a575f80fd5b5f878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611096908490611ead565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46110f6848a8a8a8a8a6115ab565b505050505050505050565b815183511461110e575f80fd5b6001600160a01b038416611120575f80fd5b3361112f818787878787611549565b5f5b84518110156111fc575f85828151811061114d5761114d611e99565b602002602001015190505f85838151811061116a5761116a611e99565b6020908102919091018101515f84815280835260408082206001600160a01b038e1683529093529190912054909150818110156111a5575f80fd5b5f838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111e1908490611ead565b92505081905550505050806111f590611ed7565b9050611131565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161124c929190612009565b60405180910390a461126281878787878761174f565b505050505050565b6003546001600160a01b03610100909104163314610b42575f80fd5b600380546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b816001600160a01b0316836001600160a01b031603611313575f80fd5b6001600160a01b038381165f81815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b5f816040516020016113919190612036565b60405160208183030381529060405280519060200120836040516020016113b89190612036565b6040516020818303038152906040528051906020012014905092915050565b6001600160a01b0384166113e9575f80fd5b335f6113f485611500565b90505f61140085611500565b9050611410835f89858589611549565b5f868152602081815260408083206001600160a01b038b1684529091528120805487929061143f908490611ead565b909155505060408051878152602081018790526001600160a01b03808a16925f92918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461149d835f898989896115ab565b50505050505050565b6114ae61184a565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114e33390565b6040516001600160a01b03909116815260200160405180910390a1565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061153857611538611e99565b602090810291909101015292915050565b61155161184a565b611559610fd7565b156115a65760405162461bcd60e51b815260206004820152601b60248201527f4576656e742068617320616c7265616479206f636375727265642e000000000060448201526064016106d2565b611262565b6001600160a01b0384163b156112625760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906115ef9089908990889088908890600401612051565b6020604051808303815f875af1925050508015611629575060408051601f3d908101601f1916820190925261162691810190612093565b60015b6116de576116356120ae565b806308c379a00361166e57506116496120c7565b806116545750611670565b8060405162461bcd60e51b81526004016106d2919061197b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106d2565b6001600160e01b0319811663f23a6e6160e01b1461149d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016106d2565b6001600160a01b0384163b156112625760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906117939089908990889088908890600401612150565b6020604051808303815f875af19250505080156117cd575060408051601f3d908101601f191682019092526117ca91810190612093565b60015b6117d9576116356120ae565b6001600160e01b0319811663bc197c8160e01b1461149d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016106d2565b60035460ff1615610b425760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106d2565b80356001600160a01b03811681146118b3575f80fd5b919050565b5f80604083850312156118c9575f80fd5b6118d28361189d565b946020939093013593505050565b6001600160e01b031981168114610a5c575f80fd5b5f60208284031215611905575f80fd5b8135611910816118e0565b9392505050565b5f60208284031215611927575f80fd5b5035919050565b5f5b83811015611948578181015183820152602001611930565b50505f910152565b5f815180845261196781602086016020860161192e565b601f01601f19169290920160200192915050565b602081525f6119106020830184611950565b606081525f61199f6060830186611950565b82810360208401526119b18186611950565b915050826040830152949350505050565b5f80604083850312156119d3575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff81118282101715611a1c57611a1c6119e2565b6040525050565b5f67ffffffffffffffff821115611a3c57611a3c6119e2565b5060051b60200190565b5f82601f830112611a55575f80fd5b81356020611a6282611a23565b604051611a6f82826119f6565b83815260059390931b8501820192828101915086841115611a8e575f80fd5b8286015b84811015611aa95780358352918301918301611a92565b509695505050505050565b5f67ffffffffffffffff831115611acd57611acd6119e2565b604051611ae4601f8501601f1916602001826119f6565b809150838152848484011115611af8575f80fd5b838360208301375f60208583010152509392505050565b5f82601f830112611b1e575f80fd5b61191083833560208501611ab4565b5f805f805f60a08688031215611b41575f80fd5b611b4a8661189d565b9450611b586020870161189d565b9350604086013567ffffffffffffffff80821115611b74575f80fd5b611b8089838a01611a46565b94506060880135915080821115611b95575f80fd5b611ba189838a01611a46565b93506080880135915080821115611bb6575f80fd5b50611bc388828901611b0f565b9150509295509295909350565b5f8060408385031215611be1575f80fd5b823567ffffffffffffffff80821115611bf8575f80fd5b818501915085601f830112611c0b575f80fd5b81356020611c1882611a23565b604051611c2582826119f6565b83815260059390931b8501820192828101915089841115611c44575f80fd5b948201945b83861015611c6957611c5a8661189d565b82529482019490820190611c49565b96505086013592505080821115611c7e575f80fd5b50611c8b85828601611a46565b9150509250929050565b5f8151808452602080850194508084015f5b83811015611cc357815187529582019590820190600101611ca7565b509495945050505050565b602081525f6119106020830184611c95565b5f8060408385031215611cf1575f80fd5b611cfa8361189d565b915060208301358015158114611d0e575f80fd5b809150509250929050565b5f805f8060808587031215611d2c575f80fd5b84359350602085013560ff81168114611d43575f80fd5b925060408501359150606085013567ffffffffffffffff811115611d65575f80fd5b8501601f81018713611d75575f80fd5b611d8487823560208401611ab4565b91505092959194509250565b5f8060408385031215611da1575f80fd5b611daa8361189d565b9150611db86020840161189d565b90509250929050565b5f805f805f60a08688031215611dd5575f80fd5b611dde8661189d565b9450611dec6020870161189d565b93506040860135925060608601359150608086013567ffffffffffffffff811115611e15575f80fd5b611bc388828901611b0f565b5f60208284031215611e31575f80fd5b6119108261189d565b600181811c90821680611e4e57607f821691505b602082108103611e6c57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561040e5761040e611e72565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561040e5761040e611e72565b808202811582820484141761040e5761040e611e72565b5f60018201611ee857611ee8611e72565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b601f821115611f48575f81815260208120601f850160051c81016020861015611f295750805b601f850160051c820191505b8181101561126257828155600101611f35565b505050565b815167ffffffffffffffff811115611f6757611f676119e2565b611f7b81611f758454611e3a565b84611f03565b602080601f831160018114611fae575f8415611f975750858301515b5f19600386901b1c1916600185901b178555611262565b5f85815260208120601f198616915b82811015611fdc57888601518255948401946001909101908401611fbd565b5085821015611ff957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b604081525f61201b6040830185611c95565b828103602084015261202d8185611c95565b95945050505050565b5f825161204781846020870161192e565b9190910192915050565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261208860a0830184611950565b979650505050505050565b5f602082840312156120a3575f80fd5b8151611910816118e0565b5f60033d11156120c45760045f803e505f5160e01c5b90565b5f60443d10156120d45790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561210457505050505090565b828501915081518181111561211c5750505050505090565b843d87010160208285010111156121365750505050505090565b612145602082860101876119f6565b509095945050505050565b5f6001600160a01b03808816835280871660208401525060a0604083015261217b60a0830186611c95565b828103606084015261218d8186611c95565b905082810360808401526121a18185611950565b9897505050505050505056fea2646970667358221220b42048d98c44b69b329e8cab87954286794cbbf1a37f47242e2a509cf2e56fb664736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000648903000000000000000000000000000000000000000000000000000000000000000006313233317833000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077831323378313200000000000000000000000000000000000000000000000000