60a06040523480156200001157600080fd5b50604051620020c1380380620020c1833981016040819052620000349162000148565b6001600160a01b03831660805260036200004f838262000261565b5060046200005e828262000261565b5050600180546001600160a01b03191633179055506200032d9050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000a357600080fd5b81516001600160401b0380821115620000c057620000c06200007b565b604051601f8301601f19908116603f01168101908282118183101715620000eb57620000eb6200007b565b816040528381526020925086838588010111156200010857600080fd5b600091505b838210156200012c57858201830151818301840152908201906200010d565b838211156200013e5760008385830101525b9695505050505050565b6000806000606084860312156200015e57600080fd5b83516001600160a01b03811681146200017657600080fd5b60208501519093506001600160401b03808211156200019457600080fd5b620001a28783880162000091565b93506040860151915080821115620001b957600080fd5b50620001c88682870162000091565b9150509250925092565b600181811c90821680620001e757607f821691505b6020821081036200020857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025c57600081815260208120601f850160051c81016020861015620002375750805b601f850160051c820191505b81811015620002585782815560010162000243565b5050505b505050565b81516001600160401b038111156200027d576200027d6200007b565b62000295816200028e8454620001d2565b846200020e565b602080601f831160018114620002cd5760008415620002b45750858301515b600019600386901b1c1916600185901b17855562000258565b600085815260208120601f198616915b82811015620002fe57888601518255948401946001909101908401620002dd565b50858210156200031d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611d636200035e600039600081816103f301528181610d4e0152818161120201526114760152611d636000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063313ce567116100cd57806395d89b4111610081578063a9059cbb11610066578063a9059cbb146101da578063dd62ed3e146103e0578063fc0c546a146103ee57600080fd5b806395d89b41146103c5578063a6f9dae1146103cd57600080fd5b80634deafcae116100b25780634deafcae1461031157806370a082311461036d5780638da5cb5b1461038057600080fd5b8063313ce567146102ef5780633ccfd60b1461030957600080fd5b80631726cbc81161012457806318b213481161010957806318b213481461020857806323b872dd146102ce57806329b55ca7146102dc57600080fd5b80631726cbc8146101ed57806318160ddd1461020057600080fd5b806305f203d91161015557806305f203d9146101b057806306fdde03146101c5578063095ea7b3146101da57600080fd5b806301ffc9a714610171578063047fc9aa14610199575b600080fd5b61018461017f366004611851565b610415565b60405190151581526020015b60405180910390f35b6101a260005481565b604051908152602001610190565b6101c36101be3660046118eb565b6104ae565b005b6101cd610781565b60405161019091906119ce565b6101846101e8366004611a41565b61080f565b6101a26101fb366004611a6b565b610846565b6000546101a2565b610292610216366004611a6b565b6002602052600090815260409020546bffffffffffffffffffffffff808216916c0100000000000000000000000081049091169063ffffffff780100000000000000000000000000000000000000000000000082048116917c010000000000000000000000000000000000000000000000000000000090041684565b604080516bffffffffffffffffffffffff958616815294909316602085015263ffffffff91821692840192909252166060820152608001610190565b6101846101e8366004611a86565b6101c36102ea366004611ac2565b610903565b6102f7601281565b60405160ff9091168152602001610190565b6101c3610e56565b6101a261031f366004611a6b565b73ffffffffffffffffffffffffffffffffffffffff166000908152600260205260409020547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6101a261037b366004611a6b565b611500565b6001546103a09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101cd6115f7565b6101c36103db366004611a6b565b611604565b6101a26101e8366004611af5565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b070000000000000000000000000000000000000000000000000000000014806104a857507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610526576001546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b60005b815181101561077d57600082828151811061054657610546611b28565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600283526040808220815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169582019590955263ffffffff780100000000000000000000000000000000000000000000000086048116928201929092527c010000000000000000000000000000000000000000000000000000000090940416606084015290925061060882611733565b60208381018051855190840190036bffffffffffffffffffffffff9081168652838116825260006060870181815273ffffffffffffffffffffffffffffffffffffffff891680835260028652604092839020895181549651858c015194519187167fffffffffffffffff00000000000000000000000000000000000000000000000090981688176c0100000000000000000000000091909716029590951777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c01000000000000000000000000000000000000000000000000000000009390951692909202939093179055805192835242938301939093529293507f437a05d5b9037b4fe16f9564c21528b3f978b6a015269140722644f407e943cd910160405180910390a25050508061077690611b86565b9050610529565b5050565b6003805461078e90611bbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107ba90611bbe565b80156108075780601f106107dc57610100808354040283529160200191610807565b820191906000526020600020905b8154815290600101906020018083116107ea57829003601f168201915b505050505081565b6040517f9c21e7b200000000000000000000000000000000000000000000000000000000815230600482015260009060240161051d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260209081526040808320815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169382019390935263ffffffff780100000000000000000000000000000000000000000000000084048116928201929092527c01000000000000000000000000000000000000000000000000000000009092041660608201526108fc81611733565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316610950576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361098a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036109c4576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a811115610a09576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052600a602482015260440161051d565b6000610a19826301e13380611c0b565b610a239042611c48565b905063ffffffff811115610a70576040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff602482015260440161051d565b6bffffffffffffffffffffffff831115610acb576040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481018490526bffffffffffffffffffffffff602482015260440161051d565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604091829020825160808101845290546bffffffffffffffffffffffff8082168084526c0100000000000000000000000083049091169383019390935263ffffffff780100000000000000000000000000000000000000000000000082048116948301949094527c01000000000000000000000000000000000000000000000000000000009004909216606083015215610be35780516040517f89bf64dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526bffffffffffffffffffffffff909116602482015260440161051d565b63ffffffff4281166040838101918252848316606085019081526bffffffffffffffffffffffff888116865273ffffffffffffffffffffffffffffffffffffffff8a811660009081526002602090815285822089518154928b0151985196518a167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff97909a167801000000000000000000000000000000000000000000000000029690961677ffffffffffffffffffffffffffffffffffffffffffffffff9886166c01000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909316969095169590951717959095169190911794909417905581548088019283905590517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810188905290927f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611c60565b506040805187815242602082015290810185905273ffffffffffffffffffffffffffffffffffffffff8816907f0e31f07bae79135368ff475cf6c7f6abb31e0fd731e03c18ad425bd9406cf0c09060600160405180910390a260408051838152602081018390527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c910160405180910390a150505050505050565b33600090815260026020908152604091829020825160808101845290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169282019290925263ffffffff7801000000000000000000000000000000000000000000000000830481169382018490527c0100000000000000000000000000000000000000000000000000000000909204909116606082015290156114fd576000610f0082611733565b905080600003610f565760608201516040517fab0246b300000000000000000000000000000000000000000000000000000000815233600482015263ffffffff909116602482015242604482015260640161051d565b6000546060830151819063ffffffff16156111bd576020840180516bffffffffffffffffffffffff90850181169182905285511690610f96906001611c82565b6bffffffffffffffffffffffff1611156110c057604080516080810182526000808252602080830182815283850183815260608501848152338552600290935294909220925183549251945191516bffffffffffffffffffffffff9182167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093176c0100000000000000000000000091909516029390931777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000093909116929092029190911790556113c6565b33600090815260026020908152604091829020865181549288015193880151606089015163ffffffff9081167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff919092167801000000000000000000000000000000000000000000000000021677ffffffffffffffffffffffffffffffffffffffffffffffff6bffffffffffffffffffffffff9687166c01000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090961696909316959095179390931716929092171790556113c6565b83516bffffffffffffffffffffffff1680156112b3576040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b15801561125b57600080fd5b505af115801561126f573d6000803e3d6000fd5b50506040805184815242602082015284870395503393507f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a92500160405180910390a25b50604080516080810182526000808252602080830182815283850183815260608501848152338552600290935294909220925183549251945191516bffffffffffffffffffffffff9182167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093176c0100000000000000000000000091909516029390931777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000093909116929092029190911790555b82900360008190556040805184815242602082015233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a260408051838152602081018390527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c910160405180910390a16040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190611c60565b505050505b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260209081526040808320815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169382019390935263ffffffff780100000000000000000000000000000000000000000000000084048116928201929092527c0100000000000000000000000000000000000000000000000000000000909204166060820181905282036115cf5780602001516bffffffffffffffffffffffff1691506115f1565b602081015181516115e09190611cb2565b6bffffffffffffffffffffffff1691505b50919050565b6004805461078e90611bbe565b60015473ffffffffffffffffffffffffffffffffffffffff163314611677576001546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161051d565b73ffffffffffffffffffffffffffffffffffffffff81166116c4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6000816060015163ffffffff1660000361175d5750602001516bffffffffffffffffffffffff1690565b6000806301e1338063ffffffff16846040015185606001510363ffffffff168161178957611789611cdf565b0491506301e1338063ffffffff168460400151420363ffffffff16816117b1576117b1611cdf565b04905063ffffffff82166117c6826001611d0e565b63ffffffff1611156117f25783602001518460000151036bffffffffffffffffffffffff16925061184a565b8163ffffffff168163ffffffff168560000151026bffffffffffffffffffffffff168161182157611821611cdf565b046bffffffffffffffffffffffff16925083602001516bffffffffffffffffffffffff16830392505b5050919050565b60006020828403121561186357600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146118e657600080fd5b919050565b600060208083850312156118fe57600080fd5b823567ffffffffffffffff8082111561191657600080fd5b818501915085601f83011261192a57600080fd5b81358181111561193c5761193c611893565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561197f5761197f611893565b60405291825284820192508381018501918883111561199d57600080fd5b938501935b828510156119c2576119b3856118c2565b845293850193928501926119a2565b98975050505050505050565b600060208083528351808285015260005b818110156119fb578581018301518582016040015282016119df565b81811115611a0d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060408385031215611a5457600080fd5b611a5d836118c2565b946020939093013593505050565b600060208284031215611a7d57600080fd5b6108fc826118c2565b600080600060608486031215611a9b57600080fd5b611aa4846118c2565b9250611ab2602085016118c2565b9150604084013590509250925092565b600080600060608486031215611ad757600080fd5b611ae0846118c2565b95602085013595506040909401359392505050565b60008060408385031215611b0857600080fd5b611b11836118c2565b9150611b1f602084016118c2565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bb757611bb7611b57565b5060010190565b600181811c90821680611bd257607f821691505b6020821081036115f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c4357611c43611b57565b500290565b60008219821115611c5b57611c5b611b57565b500190565b600060208284031215611c7257600080fd5b815180151581146108fc57600080fd5b60006bffffffffffffffffffffffff808316818516808303821115611ca957611ca9611b57565b01949350505050565b60006bffffffffffffffffffffffff83811690831681811015611cd757611cd7611b57565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600063ffffffff808316818516808303821115611ca957611ca9611b5756fea2646970667358221220b49e30fdf93d061c00dd6077912ba82712d17f8f30d710e51088cd0c25b2e8bf64736f6c634300080f00330000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144275726e61626c65204c6f636b6564204f4c4153000000000000000000000000000000000000000000000000000000000000000000000000000000000000000662754f4c41530000000000000000000000000000000000000000000000000000